iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
永豐金融APIs

永豐金融APIs - 從零開始到放棄!?系列 第 18

交易策略 - Backtrader

  • 分享至 

  • xImage
  •  

以下內容皆參考 Backtrader 官網

之前介紹了 shioaji 如何取得資料, 下單,也介紹了如何利用 Line 和 api 互動,接下來要介紹的是程式交易中,很重要的一塊交易策略,也就是我們訂下一個買入和賣出的時間點,譬如說 5 日均線突破 20 日均線買進,5 日均線跌破 20 日均線時賣出,這就是一個策略,一個策略好壞怎麼判定,可以利用歷史資料來做回策,所謂的回測,就是使用歷史資料,搭配自己的策略去進行操作,這樣就可以知道自己的策略歷史的投資報酬率是多少,雖然是歷史資料,不過還是挺有參考價值的。

本次要介紹的工具就是 Backtrader,是一套 python 平台的交易策略工具,配合 shioaji 可以取得歷史資料來進行我們交易策略的評估,今天就先介紹怎麼利用 shioaji 來取得需要的資料

  • 安裝 backtrader, matplotlib
pip install backtrader matplotlib==3.2.2

matplotlib 比較新的版本在畫圖的時候會有問題,所以指定 3.2.2 版安裝

  • 登入 shioaji
import shioaji as sj
api = sj.Shioaji()
api.login(person_id="帳號", passwd="密碼")
  • 取得歷史資料
stock2330 = api.Contracts.Stocks["2330"]
# 台積電 2020 年的歷史資料
kbar = api.kbars(stock2330, '2020-01-01', '2020-12-31')
  • 轉換成 panda 的 dataframe
from datetime import datetime
dts = list(map(lambda x:datetime.utcfromtimestamp(x/10**9), kbar.ts))
df = pd.DataFrame(
    {
        "open": pd.Series(kbar.Open),
        "high": pd.Series(kbar.High),
        "low": pd.Series(kbar.Low),
        "close": pd.Series(kbar.Close),
        "volume": pd.Series(kbar.Volume),
    }
)

df.index = pd.Index(dts)

  • backtracder 引用資料
import backtrader as bt

# 這二行是 jupyter notebook 要畫圖使用,如果不是用 jupyter notebook 或是沒有畫圖的需求可以不用
import matplotlib.pyplot as plt
%matplotlib inline

cerebro = bt.Cerebro(stdstats=False)

# 引用一個空的策略
cerebro.addstrategy(bt.Strategy)

data = bt.feeds.PandasData(
    # Panda.DataFrame 變數名稱
    dataname = df,
    # 因為 kbar 取得的資料是分鐘為單位,如果是用其它的資料,可以自己改
    timeframe = bt.TimeFrame.Minutes 
)

# 因為匯入的資料是分鐘,我們希望是用每日的資料,所以這邊轉成日
cerebro.resampledata(data, timeframe=bt.TimeFrame.Days, compression = 1)

# matplot 設定 (如果不是在 jupyter notebook 這一段可以省)
plt.rcParams["figure.figsize"] = [15, 12] # inch
plt.rcParams.update({'font.size': 12})

# iplot = False 是 jupyter notebook 用的
create.plot(style="bar", iplot=False)

這邊就簡單介紹怎麼將 shioaji 的資料匯入到 Backtrader 裡,明天再繼續我們的第一個策略


上一篇
LineBot - 部署 api
下一篇
Backtrader - 新增策略
系列文
永豐金融APIs - 從零開始到放棄!?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言